#!/bin/bash

# 1. 检查是否以sudo用户运行，如果不是，则提示并退出脚本
if [[ $EUID -ne 0 ]]; then
    echo "此脚本必须以root用户或通过sudo权限运行。"
    exit 1
fi

# 2. 询问是否使用ftpuser作为默认用户，然后创建新用户并设置密码
read -p "是否使用'ftpuser'作为默认FTP用户？(y/n) " use_default_user
if [[ $use_default_user =~ ^[Yy]$ ]]; then
    ftp_username="ftpuser"
else
    read -p "请输入FTP用户名: " ftp_username
fi

echo "请输入$ftp_username用户的密码（请使用足够复杂的密码）: "
read -s ftp_password
echo "" # 添加空行以提高可读性
echo "请再次输入密码以确认: "
read -s confirm_password
if [[ "$ftp_password" != "$confirm_password" ]]; then
    echo "两次输入的密码不一致，请重新运行脚本并设置密码。"
    exit 1
fi
echo "正在为$ftp_username设置密码..."
useradd -m -s /bin/bash $ftp_username
echo "$ftp_username:$ftp_password" | chpasswd

# 3. 下载vsftpd并检测及运行状态
echo "正在安装vsftpd..."
apt update && apt install -y vsftpd

systemctl status vsftpd
if [[ $? -eq 0 ]]; then
    echo "vsftpd 正在运行。"
else
    echo "正在启动vsftpd..."
    systemctl start vsftpd
    echo "vsftpd 已启动。"
fi

# 4. 询问是否允许上传文件并更新vsftpd配置，随后重启vsftpd服务
read -p "是否需要通过FTP上传文件？(y/n) " allow_uploads
if [[ $allow_uploads =~ ^[Yy]$ ]]; then
    echo "配置vsftpd允许文件上传..."
    cp /etc/vsftpd.conf /etc/vsftpd.conf.bak  # 备份原始配置文件
    echo "write_enable=YES" >> /etc/vsftpd.conf  # 追加配置行至文件末尾
else
    echo "FTP上传功能未启用。"
fi

echo "重启vsftpd服务以应用配置变更..."
systemctl restart vsftpd
echo "vsftpd服务已重启，新配置已生效。"

# 5. 设置vsftpd开机自启动
systemctl enable vsftpd
echo "已设置vsftpd开机自启动。"

# 6. 询问FTP文件夹位置，使用默认位置并输出
read -p "请输入FTP文件夹路径（留空使用默认路径 /home/$ftp_username）: " ftp_folder
if [[ -z $ftp_folder ]]; then
    ftp_folder="/home/$ftp_username"
    echo "使用默认FTP文件夹路径: $ftp_folder"
else
    echo "使用指定FTP文件夹路径: $ftp_folder"
fi

# 7. 让防火墙放行20, 21端口
ufw allow 20/tcp,21/tcp
ufw reload
echo "防火墙规则已更新，允许FTP流量通过端口20和21。"

# 8. 输出配置成功信息和后续操作指南
echo "FTP配置成功！"
echo "要连接到FTP服务器，请执行以下操作："
echo "地址: $(hostname -I | awk '{print $1}')"
echo "用户名: $ftp_username"
echo "vsftpd 状态: 运行 'systemctl status vsftpd' 查看当前状态。"
echo "FTP文件夹位置: $ftp_folder"

exit 0